package cn.initcap.concurrency.classloader;

import lombok.extern.slf4j.Slf4j;

/**
 * @author initcap
 * @date Created in 2018/8/24 AM8:36.
 */
@Slf4j
public class StrTest {

    public static void main(String[] args) {
        // 在堆中创建对象
        String s1 = new String("abc");
        /*
         Native方法，作用：如果运行时常量池中已经包含一个等于此对象内容的字符串，则返回常量池中该字符串的引用；
         如果没有，则在常量池中创建与此String内容相同的字符串，并返回常量池中创建的字符串的引用。
         */
        String s2 = s1.intern();
        String s3 = "abc";
        log.info("s1:{}", s1);
        log.info("s1 == s2 ? : {}", s1 == s2);
        log.info("s2 == s3 ? : {}", s2 == s3);

        String str1 = "str";
        String str2 = "ing";

        // 常量池中的对象
        String str3 = "str" + "ing";
        // 在堆上创建的新的对象
        String str4 = str1 + str2;
        // 常量池中的对象
        String str5 = "string";
        log.info("str3 : {}", str3);
        log.info("str4 : {}", str4);
        log.info("str5 : {}", str5);
        log.info("str3 == str4 ? : {}", str3 == str4);
        log.info("str3 == str5 ? : {}", str3 == str5);
        log.info("str4 == str5 ? : {}", str4 == str5);
    }


}
